EC2インスタンスにWindowsとMacからセッションマネージャーを利用して接続してみた
こんにちは!DA(データアナリティクス)事業本部 インテグレーション部の大高です。
AWS Systems Mangerのセッションマネージャーを利用すると、SSHではなくAWS CLI経由でEC2インスタンスに接続することができます。
今回、Windows、MacからEC2インスタンスに接続をする機会があったので、AWS CLIのインストール・設定からEC2へ接続をするまでを、本エントリでまとめたいと思います。
前提
前提として、EC2インスタンス側のセットアップは完了しており、本エントリではクライアント側から接続するための方法について記載します。
また、試した環境はそれぞれ以下の通りとなります。
- Windows
- Windows 10 Pro (64bit)
- Mac
- macOS Catalina (64bit)
Windows編
では、まずはWindowsからです。
AWS CLI v2のインストール
接続にはAWS CLIが必要となるので、ドキュメントの通りインストールを行います。なお、今回は最新のAWS CLI v2をインストールします。
インストールは以下から最新版のインストーラをダウンロードして、インストールを行います。
https://awscli.amazonaws.com/AWSCLIV2.msi
インストーラを実行するだけなので、特にこちらは問題ないかと思います。インストールが完了したらPowerShellで以下のコマンドを実行して確認してみます。
> aws --version aws-cli/2.1.14 Python/3.7.9 Windows/10 exe/AMD64 prompt/off
問題なくインストールされました。
Session Manager plugin のインストール
AWS CLIのインストールは完了しましたが、AWS CLIを利用して接続するには追加で「Session Manager plugin」をインストールする必要があります。続けて、今度はこちらをインストールします。
インストールは以下から最新版のインストーラをダウンロードして、インストールを行います。
こちらもインストーラを実行するだけなので、特にこちらは問題ないかと思います。インストールが完了したらPowerShellで以下のコマンドを実行して確認してみます。なお、PowerShellを立ち上げたままの場合はインストールされたことが認識されずにエラーとなるので、PowerShellを立ち上げ直してから実行します。
> session-manager-plugin The Session Manager plugin was installed successfully. Use the AWS CLI to start a session.
上記のように表示されれば問題ありません。これでインストールは完了です。
AWS CLIの設定
最後に、AWS CLIの設定を行います。今回はIAMユーザのアクセスキーが発行されていることを前提として、PowerShellで以下のようにaws configure
コマンドを利用して設定を行います。
> aws configure AWS Access Key ID [None]: AKIXXXXXXXXXXXXXXXXX AWS Secret Access Key [None]: KO8XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Default region name [None]: ap-northeast-1 Default output format [None]: json
これで設定は完了です。なお、デフォルトプロファイルではなく、名前付きプロファイル(ここではssm
とします)として定義する場合には、%HOMEPATH%\.aws
フォルダ配下にあるconfig
ファイルとcredential
ファイルを、それぞれ以下のように記載して設定します。
[default] region = ap-northeast-1 output = json [profile ssm] region = ap-northeast-1 output = json
[default] aws_access_key_id = AKIXXXXXXXXXXXXXXXXX aws_secret_access_key = KO8XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX [ssm] aws_access_key_id = AKIXXXXXXXXXXXXXXXXX aws_secret_access_key = KO8XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
接続確認
設定が完了したら、コマンドプロンプトで接続を試してみます。接続時には--target
の引数として、対象のEC2インスタンスのインスタンスID(i-XXXXXXXXXXXXXXXXX
)を指定します。
なおWindows環境では、標準設定の場合にターミナルのコードページが932 (Shift-JIS)
となっているかと思います。そのため、日本語の文字化けを避けるためchcp
コマンドで65001 (UTF-8)
に変更してからコマンドプロンプトで接続しています。
2022/01/13 追記
PowerShell の場合、セッションマネージャーでEC2インスタンスに接続した時点で PowerShell のコードページが Shift-JIS になってしまう事象を確認しました。このため、ここでの手順は「コマンドプロンプト」での実行に修正しました。
> chcp 65001 Active code page: 65001 > aws ssm start-session --target i-XXXXXXXXXXXXXXXXX Starting session with SessionId: foobar-XXXXXXXXXXXXXXXXX sh-4.2$
無事に接続できました!なお、切断にするにはexit
コマンドで切断します。
名前付きプロファイルを指定する場合には、同様に以下のように--profile [プロファイル名]
というオプションを指定して接続します。
> chcp 65001 Active code page: 65001 > aws ssm start-session --target i-XXXXXXXXXXXXXXXXX --profile ssm Starting session with SessionId: foobar-XXXXXXXXXXXXXXXXX sh-4.2$
こちらも問題ありませんね。以上、Windows編でした。
Mac編
引き続き、Mac編です。流れはほとんどWindows編と同じとなります。
AWS CLI v2のインストール
接続にはAWS CLIが必要となるので、ドキュメントの通りインストールを行います。なお、今回は最新のAWS CLI v2をインストールします。
インストールは以下から最新版のインストーラをダウンロードして、インストールを行います。
https://awscli.amazonaws.com/AWSCLIV2.pkg
インストーラを実行するだけなので、特にこちらは問題ないかと思います。インストールが完了したらターミナルで以下のコマンドを実行して確認してみます。
$ aws --version aws-cli/2.1.14 Python/3.7.4 Darwin/19.6.0 exe/x86_64 prompt/off
問題なくインストールされました。
Session Manager plugin のインストール
AWS CLIのインストールは完了しましたが、AWS CLIを利用して接続するには追加で「Session Manager plugin」をインストールする必要があります。続けて、今度はこちらをインストールします。
インストールは以下のようにターミナルから最新版のインストーラをダウンロードして、インストールを行います。
$ cd /tmp $ curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/mac/sessionmanager-bundle.zip" -o "sessionmanager-bundle.zip" $ unzip sessionmanager-bundle.zip $ sudo ./sessionmanager-bundle/install -i /usr/local/sessionmanagerplugin -b /usr/local/bin/session-manager-plugin
インストールが完了したら以下のコマンドを実行して確認してみます。
$ session-manager-plugin The Session Manager plugin was installed successfully. Use the AWS CLI to start a session.
上記のように表示されれば問題ありません。これでインストールは完了です。
AWS CLIの設定
最後に、AWS CLIの設定を行います。今回はIAMユーザのアクセスキーが発行されていることを前提として、ターミナルで以下のようにaws configure
コマンドを利用して設定を行います。
$ aws configure AWS Access Key ID [None]: AKIXXXXXXXXXXXXXXXXX AWS Secret Access Key [None]: KO8XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Default region name [None]: ap-northeast-1 Default output format [None]: json
これで設定は完了です。なお、デフォルトプロファイルではなく、名前付きプロファイル(ここではssm
とします)として定義する場合には、~\.aws
フォルダ配下にあるconfig
ファイルとcredential
ファイルを、それぞれ以下のように記載して設定します。
[default] region = ap-northeast-1 output = json [profile ssm] region = ap-northeast-1 output = json
[default] aws_access_key_id = AKIXXXXXXXXXXXXXXXXX aws_secret_access_key = KO8XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX [ssm] aws_access_key_id = AKIXXXXXXXXXXXXXXXXX aws_secret_access_key = KO8XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
接続確認
設定が完了したら、ターミナルで接続を試してみます。接続時には--target
の引数として、対象のEC2インスタンスのインスタンスID(i-XXXXXXXXXXXXXXXXX
)を指定します。
$ aws ssm start-session --target i-XXXXXXXXXXXXXXXXX Starting session with SessionId: foobar-XXXXXXXXXXXXXXXXX sh-4.2$
無事に接続できました!なお、切断にするにはexit
コマンドで切断します。
名前付きプロファイルを指定する場合には、同様に以下のように--profile [プロファイル名]
というオプションを指定して接続します。
$ aws ssm start-session --target i-XXXXXXXXXXXXXXXXX --profile ssm Starting session with SessionId: foobar-XXXXXXXXXXXXXXXXX sh-4.2$
こちらも問題ありませんね。以上、Mac編でした。
まとめ
以上、EC2インスタンスにWindowsとMacからセッションマネージャーを利用して接続してみました。
どなたかのお役に立てば幸いです。それでは!